home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Borland Visual dBASE Professiona v7.0 / DATA1.CAB / Sample_dBASE / Text Table.dmd < prev    next >
Text File  |  1997-11-20  |  8KB  |  271 lines

  1. #define TEXT_TABLE "Text Table.txt"
  2. #include <vdbase.h>
  3. #define NAVIGATE_NEXT  1
  4. #define NAVIGATE_FIRST 2
  5. #define NAVIGATE_LAST  3
  6. #define STATE_CLOSED   0
  7. #define STATE_EDIT     2
  8. #define STATE_APPEND   3
  9. ** END HEADER -- do not remove this line
  10. //
  11. // Generated on 09/23/97
  12. //
  13. class TextTableDataModule of DATAMODULE
  14.  
  15.  
  16.    this.TEXTQUERY = new QUERY()
  17.    this.TEXTQUERY.parent = this
  18.    with (this.TEXTQUERY)
  19.       onClose = class::CLOSETEXT
  20.       left = 0
  21.       top = 0
  22.       sql = "select * from TextTable.txt"
  23.       execute = class::OPENTEXT
  24.       active = true
  25.    endwith
  26.  
  27.  
  28.    with (this.TEXTQUERY.rowset)
  29.       last = class::LASTTEXT
  30.       next = class::NEXTTEXT
  31.       first = class::FIRSTTEXT
  32.       goto = class::GOTOTEXT
  33.       bookmark = {; return this.cursor}
  34.       beginAppend = class::APPENDTEXT
  35.       delete = class::DELETETEXT
  36.       save = class::SAVETEXT
  37.       count = class::COUNTTEXT
  38.       lockRow = {||true}
  39.    endwith
  40.  
  41.  
  42.    // {Linked Method} form.textquery.execute
  43.   function openText
  44.       local f, bOpen
  45.       f = new Field()
  46.       bOpen = true
  47.       this.session := null
  48.       this.file = new File()
  49.       this.rowset.cursor = 1
  50.       try 
  51.          this.file.open( TEXT_TABLE, "R" )
  52.          with ( f )
  53.             fieldName := "TextField"
  54.             length    := 50
  55.             value     := this.file.readln()
  56.          endwith
  57.          f.onChange = { ; this.parent.parent.modified := true}
  58.          this.rowset.fields.add( f )
  59.          this.rowset.fields[1].baseValue = f.value
  60.          if ( this.file.eof() )
  61.             this.rowset.endOfSet := true
  62.          else
  63.             this.rowset.cursor   := 1
  64.          endif
  65.          this.rowset.state := STATE_EDIT
  66.       catch ( Exception e )
  67.          bOpen := false
  68.          this.rowset.state := STATE_CLOSED
  69.          with ( f )
  70.             fieldName := "TextField"
  71.             length    := 50
  72.             value     := "Error: Unable to open 'Text Table.txt'"
  73.          endwith
  74.          this.rowset.fields.add( f )
  75.       endtry
  76.    return ( bOpen )
  77.  
  78.    // {Linked Method} form.textquery.onClose
  79.    function closeText
  80.       if ( not this.rowset.state == STATE_CLOSED )
  81.          this.file.close()
  82.       endif
  83.    return true
  84.  
  85.    // {Linked Method} form.textquery.rowset.next
  86.    function nextText( nOffset )
  87.       local sValue, bNext
  88.       bNext = true
  89.       if ( not this.state == STATE_CLOSED )
  90.          ROWSET::NEXT()
  91.          sValue = null
  92.          this.endOfSet := false
  93.          if ( PCOUNT() == 0 )
  94.             nOffset = 1
  95.          endif
  96.          if ( nOffset > 0 )
  97.             // forward movement
  98.             for i = 1 to nOffset
  99.                 if this.parent.file.eof()
  100.                    this.endOfSet := true
  101.                    nOffset := 0
  102.                 else
  103.                    sValue := this.parent.file.readln() 
  104.                 endif
  105.                 this.cursor++
  106.              next
  107.          else
  108.             // backward movement
  109.             if ( this.cursor + nOffset ) > 0            
  110.                this.parent.file.seek( 0, FILE_BEGIN )
  111.                this.cursor := (this.cursor + nOffset )
  112.                for i = 1 to this.cursor
  113.                    sValue := this.parent.file.readln()
  114.                next
  115.             else
  116.                // attempt to go before first row.
  117.                this.cursor   := 0
  118.                this.endOfSet := true
  119.                this.parent.file.seek( 0, FILE_BEGIN  )
  120.             endif
  121.          endif
  122.          with ( this.fields[1] )
  123.             value     := sValue
  124.             baseValue := sValue
  125.          endwith
  126.          this.modified := false
  127.          this.refreshControls()
  128.          bNext := ( not this.endOfSet )
  129.       endif
  130.    return ( bNext )
  131.  
  132.    // {Linked Method} form.textquery.rowset.first
  133.    function firstText
  134.       if ( not this.state == STATE_CLOSED )
  135.          ROWSET::FIRST()
  136.          this.parent.file.seek( 0, FILE_BEGIN )
  137.          this.cursor := 0
  138.          class::nextText()
  139.       endif
  140.    return true
  141.  
  142.    // {Linked Method} form.textquery.rowset.last
  143.    function lastText
  144.        local sValue
  145.        if ( not this.state == STATE_CLOSED )
  146.           ROWSET::LAST()
  147.           sValue = null
  148.           this.parent.file.seek( 0, FILE_BEGIN  )
  149.           this.cursor = 0
  150.           do while ( NOT this.parent.file.eof() )
  151.              sValue := this.parent.file.readln()
  152.              this.cursor++
  153.           enddo           
  154.           with ( this.fields[1] )          
  155.              value     := sValue
  156.              baseValue := sValue
  157.           endwith             
  158.          this.modified := false
  159.          this.refreshControls()
  160.       endif
  161.    return true
  162.  
  163.    // {Linked Method} form.textquery.rowset.save
  164.    function saveText
  165.       if ( not this.state == STATE_CLOSED )
  166.          ROWSET::SAVE()
  167.          this.modified := false
  168.          do case
  169.             case ( this.state == STATE_EDIT )
  170.                  class::rewriteText( this.fields[1].value )
  171.             case ( this.state == STATE_APPEND )
  172.                 this.parent.file.seek( 0, FILE_END )
  173.                 this.parent.file.writeln( this.fields[1].value )
  174.                 this.fields[1].baseValue := this.fields[1].value
  175.                 this.state := STATE_EDIT
  176.                 class::lastText()
  177.          endcase
  178.       endif
  179.    return true
  180.  
  181.    // {Linked Method} form.textquery.rowset.goto
  182.    function gotoText( nCursor )  
  183.       local nGoto, bGoto
  184.       bGoto = true
  185.       if ( not this.state == STATE_CLOSED )
  186.          nGoto = ( nCursor )
  187.          class::firstText()
  188.          if ( nGoto > 1 )
  189.             class::nextText( nGoto - 1 )
  190.          endif
  191.          bGoto := ( not this.endOfSet )
  192.       endif
  193.    return ( bGoto )
  194.  
  195.    // {Linked Method} form.textquery.rowset.count
  196.    function countText
  197.       local nCount, nCurrent
  198.       nCount = 0
  199.       if ( not this.state == STATE_CLOSED )
  200.          nCurrent = this.parent.file.seek( 0, FILE_CURRENT )
  201.         this.parent.file.seek( 0, FILE_BEGIN )
  202.         do while ( NOT this.parent.file.eof() )
  203.            this.parent.file.readln()
  204.            nCount++
  205.         enddo
  206.         this.parent.file.seek( nCurrent, FILE_BEGIN  )
  207.       endif
  208.    return nCount
  209.  
  210.    // {Linked Method} form.textquery.rowset.delete
  211.    function deleteText      
  212.       if ( not this.state == STATE_CLOSED )
  213.          class::rewriteText( null )
  214.          class::gotoText( this.cursor )
  215.       endif
  216.    return true
  217.  
  218.    function rewriteText( xValue )
  219.       local sTemp, sText, sValue
  220.       local tmpFile
  221.       local nTempCursor, nPosition
  222.       sTemp = FUNIQUE() + ".TXT"
  223.       sText = this.parent.file.path
  224.       tmpFile = new File()
  225.       tmpFile.create( sTemp, "RW" )
  226.       nTempCursor = 0
  227.       nPosition   = 0
  228.       this.parent.file.seek( 0, FILE_BEGIN )
  229.       do while ( NOT this.parent.file.eof() )
  230.          sValue = this.parent.file.readln() 
  231.          nTempCursor++
  232.          if ( nTempCursor == this.cursor )
  233.             if ( xValue == null )
  234.                nPosition := this.parent.file.position 
  235.             else
  236.                tmpFile.writeln( xValue )
  237.                nPosition := tmpFile.position
  238.             endif
  239.          else
  240.             tmpFile.writeln( sValue )
  241.          endif
  242.       enddo
  243.       this.parent.file.close()
  244.       tmpFile.close()
  245.  
  246.       try
  247.         tmpFile.delete( sText )
  248.         tmpFile.copy( sTemp, sText )
  249.         tmpFile.delete( sTemp )
  250.       catch ( Exception e )
  251.          MSGBOX( e.message, "Alert", 0 + 48 )
  252.       endtry
  253.  
  254.       this.parent.file.open( sText, "R" )
  255.       this.parent.file.seek( nPosition, FILE_BEGIN )
  256.    return true
  257.  
  258.    // {Linked Method} form.textquery.rowset.beginAppend
  259.    function appendText
  260.       if ( not this.state == STATE_CLOSED )
  261.          with ( this.fields[1] )
  262.             value     := SPACE(0)
  263.             baseValue := SPACE(0)
  264.          endwith
  265.          this.modified := true
  266.          this.refreshControls()
  267.          this.state := STATE_APPEND
  268.       endif
  269.    return true
  270. endclass
  271.